package pckDao;

import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import pckEntidad.Compra;
import pckUtil.Conexion;


public class CompraDao implements Serializable {

    private Conexion oConexion=new Conexion();
    private Compra oCompra = null;
    private List<Compra> lisCompra=null;
    private List<Compra> busCompraFec=null;
    private List<Compra> busCompraCom=null;
    private List<Compra> busCompraEst=null;
    
    public void insertar(Compra oCom){
         String sql = "{call sping_Compra(?,?,?,?,?,?)}";
         CallableStatement cst;
        try {
            cst = oConexion.getConnection().prepareCall(sql);
            cst.setString(1,oCom.getFechcom());
            cst.setDouble(2,oCom.getMontcom());
            cst.setString(3,oCom.getProveedor().getIdprov());
            cst.setString(4,oCom.getTrabajador().getIdtrab());
            cst.setString(5,oCom.getTipocom());
            cst.setString(6,oCom.getEstacom() );
            cst.execute();            
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
           
     }
    
            
    public List<Compra> listar(){
    String sql = "{call splis_Compra}";
        try {
            CallableStatement cst = oConexion.getConnection().prepareCall(sql);
            ResultSet rst = cst.executeQuery();
            lisCompra= new ArrayList<Compra>();
            while(rst.next()){
                oCompra = new Compra();
                oCompra.setIdcomp(rst.getString(1));
                oCompra.setTipocom(rst.getString(2));
                oCompra.setMontcom(rst.getDouble(3));
                oCompra.setFechcom(rst.getString(4));
                oCompra.setProveedor(new ProveedorDao().obtener(rst.getString(5)));
                oCompra.setTrabajador(new TrabajadorDao().obtener(rst.getString(6)));
                oCompra.setEstacom(rst.getString(7));
                lisCompra.add(oCompra);
            }
            return  lisCompra;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         return null;
     }
    
    
    public void actualizar( Compra oCom){
        try {
            String sql = "{call spact_tblCompra(?,?,?,?,?,?,?)}";
            CallableStatement cst = oConexion.getConnection().prepareCall(sql);
            cst.setString(1, oCom.getIdcomp());
            cst.setString(2, oCom.getFechcom());
            cst.setDouble(3, oCom.getMontcom());
            cst.setString(4, oCom.getProveedor().getIdprov());
            cst.setString(5, oCom.getTrabajador().getIdtrab());
            cst.setString(6, oCom.getTipocom());
            cst.setString(7, oCom.getEstacom());
            cst.execute();
            
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         
     }
    
    public void desactivar(String idCom){
    try{
        String sql="{call spcan_Compra(?)}";
        CallableStatement cst=oConexion.getConnection().prepareCall(sql);
        cst.setString(1,idCom);
        cst.execute();
    }catch(SQLException ex){
        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
         
    }
    
    
    public List<Compra> buscarFecha(String fecha) {
         
         String sql = "{call spbus_compraFec(?)}";
        try {
            CallableStatement cst = oConexion.getConnection().prepareCall(sql); 
            cst.setString(1, fecha);
            ResultSet rst = cst.executeQuery();
            busCompraFec= new ArrayList<Compra>();

            boolean econtrado=false;
            while(rst.next()){
                oCompra = new Compra();
                oCompra.setIdcomp(rst.getString(1)); 
                oCompra.setTipocom(rst.getString(2));
                oCompra.setMontcom(rst.getDouble(3));
                oCompra.setFechcom(rst.getString(4));
                oCompra.setProveedor(new ProveedorDao().obtener(rst.getString(5)));
                oCompra.setTrabajador(new TrabajadorDao().obtener(rst.getString(6)));
                oCompra.setEstacom(rst.getString(7));
                busCompraFec.add(oCompra);

            }
            if (!econtrado) {
                JOptionPane.showMessageDialog(null, "No se registraron compras para la fecha : "+fecha);
            }
            return  busCompraFec;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         return null;
     }
     public List<Compra> buscarComprobante(String comprobante) {
         
         String sql = "{call spbus_compraFec(?)}";
        try {
            CallableStatement cst = oConexion.getConnection().prepareCall(sql); 
            cst.setString(1, comprobante);
            ResultSet rst = cst.executeQuery();
            busCompraCom= new ArrayList<Compra>();

            boolean econtrado=false;
            while(rst.next()){
                oCompra = new Compra();
                oCompra.setIdcomp(rst.getString(1)); 
                oCompra.setTipocom(rst.getString(2));
                oCompra.setMontcom(rst.getDouble(3));
                oCompra.setFechcom(rst.getString(4));
                oCompra.setProveedor(new ProveedorDao().obtener(rst.getString(5)));
                oCompra.setTrabajador(new TrabajadorDao().obtener(rst.getString(6)));
                oCompra.setEstacom(rst.getString(7));
                busCompraCom.add(oCompra);

            }
            if (!econtrado) {
                JOptionPane.showMessageDialog(null, "No se registraron compras para la fecha : "+comprobante);
            }
            return  busCompraCom;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         return null;
     }
     public List<Compra> buscarEstado(String estado) {
         
         String sql = "{call spbus_compraFec(?)}";
        try {
            CallableStatement cst = oConexion.getConnection().prepareCall(sql); 
            cst.setString(1, estado);
            ResultSet rst = cst.executeQuery();
            busCompraEst= new ArrayList<Compra>();

            boolean econtrado=false;
            while(rst.next()){
                oCompra = new Compra();
                oCompra.setIdcomp(rst.getString(1)); 
                oCompra.setTipocom(rst.getString(2));
                oCompra.setMontcom(rst.getDouble(3));
                oCompra.setFechcom(rst.getString(4));
                oCompra.setProveedor(new ProveedorDao().obtener(rst.getString(5)));
                oCompra.setTrabajador(new TrabajadorDao().obtener(rst.getString(6)));
                oCompra.setEstacom(rst.getString(7));
                busCompraEst.add(oCompra);

            }
            if (!econtrado) {
                JOptionPane.showMessageDialog(null, "No se registraron compras para la fecha : "+estado);
            }
            return  busCompraEst;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
         return null;
     }
}
